草庐IT

Java TCP Socket等待空闲?

全部标签

c# - 是否可以判断一个对象在运行时是否可等待?

我recently了解到任何具有返回awaiter的GetAwaiter方法的对象可以是await-ed。即使它是一个扩展方法也是如此,这意味着基本上任何对象都可以await-able,如果你愿意的话。但是有没有办法在运行时判断一个对象是否可以await?普通反射不会工作,因为它没有列出对象的扩展名方法。问这个问题时我并没有特别的需要,我只是好奇它是否可能。 最佳答案 这是不可能的,因为C#编译器用来做出该决定的信息已经消失。为了解析扩展方法,我们需要知道导入的命名空间。该信息在运行时不可用。这是一个仅限C#的概念。CLR不知道什么

c# - 高性能套接字上的异步等待与线程池与多线程(C10k 解决方案?)

我对async-await、pool和thread真的很困惑。主要问题始于这个问题:“当我必须处理10k套接字I/O时我能做什么?”(又名TheC10kProblem)。首先,我尝试创建一个自定义的线程池架构它使用一个主Queue和多个Thread来处理所有传入数据。这是一次关于理解的很棒的经历thread-safety和multi-threading但thread是一个矫枉过正现在使用async-await。后来,我用async-await实现了一个简单的架构,但我无法理解为什么“async和await关键字不会导致要创建的额外线程。”(fromMSDN)?我认为有必须有一些thre

C# RabbitMQ 等待指定超时的一条消息?

RabbitMQWaitforamessagewithatimeout中的解决方案和WaitforasingleRabbitMQmessagewithatimeout似乎不起作用,因为官方C#库中没有下一个传递方法,并且QueueingBasicConsumer被删除,所以它只是到处抛出NotSupportedException。如何在指定的超时时间内等待来自队列的单个消息?附言可以通过Basic.Get()来完成,是的,但是好吧,在指定的时间间隔内拉取消息(过多的流量,过多的CPU)是一个糟糕的解决方案。更新EventingBasicConsumer通过实现不支持立即取消。即使您在某

c# - 在应用程序/服务关闭/停止之前等待计时器经过事件完成

总结:在Windows服务和控制台应用程序中,我调用了一个包含计时器的公共(public)库,该计时器会定期触发大约需要30秒才能完成的操作。这工作正常,但是......当调用服务停止或应用程序退出并且计时器在ElapsedEventHandler中时,我需要服务停止/应用程序退出以等待事件处理程序完成。我通过在调用计时器停止方法时检查boolInEvent属性来实现此功能。虽然这很实用,但问题是:这是执行此操作的最佳方法吗?是否有替代方法可以更好地满足此目的?另一个问题是我需要避免服务停止请求因“服务无法响应停止请求”而失败这是我的实现publicsealedclassTimedPr

c# - 如果线程正在等待异步操作完成,.NET Task 线程的资源是否会暂时返回池中?

我有一个做两件事的TPL任务。首先,它调用网络服务。其次,它将一些数据插入数据库。我有多达20个任务同时开始,一遍又一遍地做同样的事情。他们整天所做的就是调用Web服务并将数据插入数据库。我对.NET中的TPL还很陌生。我已经完成了一些有关后台工作进程和异步Web服务的工作。Web服务调用和数据库插入都是任务运行线程内的阻塞调用。我知道在幕后,当您使用Tasks时,.NET会为您管理一个线程池。是吗?如果我使用async和await()进行服务调用和数据库调用而不是使它们阻塞调用,线程池是否会有更多线程供其使用?我的理论(我不确定我为什么这么认为)是线程在等待阻塞的Web服务时正忙于无

c# - 在 C# 中获取用户空闲时间?

我找到了关于如何获取用户空闲时间的教程IdleTime.问题是它只有在应用程序在用户身上运行时才能工作。我的应用程序在SYSTEM上运行。如何获得空闲时间?或者PC是否空闲? 最佳答案 我知道这个答案已经被接受,但我只是想添加这个,以防人们想在终端服务环境中做同样的事情。Cassia是一个开源库,它围绕Windows终端服务API放置.NET包装器。我已经将它用于我的服务器管理,并且效果非常好。您可以通过调用ITerminalServicesSession.LastInputTime获取任何session的空闲时间

c# - 我如何处理不想等待的异步任务?

我正在编写一个多人游戏服务器,并且正在研究新的C#async/await功能可以实现的方式帮我。服务器的核心是一个循环,它会尽可能快地更新游戏中的所有Actor可以:while(!shutdown){foreach(varactorinactors)actor.Update();//Sendandreceivependingnetworkmessages//Variousothersystemmaintenance}此循环需要处理数千个Actor并每秒更新多次以保持游戏运行流畅。有些Actor偶尔会在他们的更新功能中执行缓慢的任务,例如从数据库中获取数据,这是我想使用异步的地方。一旦检

c# - 在方法内部等待,直到事件被捕获

我对C#中的一个方法有这个问题。我创建了一个方法,该方法从名为Phone.GetLampMode();的dll中调用一个函数现在Phone.GetLampMode不返回任何内容。数据在“onGetLampModeResponse”事件中返回。有没有一种方法可以在我的方法中等待,直到我从onGetLampModeResponse事件中获取数据?publicboolcheckLamp(intiLamp){Phone.ButtonIDConstantsbtn=newPhone.ButtonIDConstants();btn=Phone.ButtonIDConstants.BUTTON_1;b

c# - 如何强制串行端口写入方法在发送数据之前等待线路清除?

这是我正在尝试做的事情的一些背景:打开从移动设备到蓝牙打印机的串行端口。向蓝牙打印机发送EPL/2表格,以便它了解如何处理即将接收的数据。收到表格后,将一些数据发送到打印机,这些数据将打印在标签纸上。根据需要为每个要打印的标签重复第3步。第2步只发生在第一次,因为表单不需要在每个标签之前。我的问题是,当我发送表格时,如果我发送标签数据的速度太快,它将无法打印。有时我会在标签上打印“蓝牙故障:radio无法运行”,而不是我发送的数据。我通过执行以下操作找到了解决该问题的方法:for(intattempt=0;attempt所以基本上,我可以捕获TimeoutException并在等待一定

c# - 为什么等待冷任务不抛出

我只是想看看在等待冷任务(即尚未启动的Task)时会发生什么。令我惊讶的是,代码永远挂起,“Finsihed”从未打印出来。我希望抛出异常。publicasyncTaskTest1(){vartask=newTask(()=>Thread.Sleep(1000));//task.Start();awaittask;}voidMain(){Test1().Wait();Console.WriteLine("Finished");}然后我想也许任务可以从另一个线程开始,所以我将代码更改为:publicasyncTaskTest1(){vartask=newTask(()=>Thread.S